import { defineStore } from 'pinia'

export const useCounterStore = defineStore('counter', {
  state: () => ({
    // 定义公共数据购物车列表
    cartList: [],
    addressList: [
      {
        id: '1',
        name: '张三',
        tel: '13000000000',
        address: '浙江省杭州市西湖区文三路 138 号东方通信大厦 7 楼 501 室',
        isChecked: true, // 是否选中 默认选中
      },
      {
        id: '2',
        name: '李四',
        tel: '1310000000',
        address: '浙江省杭州市拱墅区莫干山路 50 号',
        isChecked: false // 默认选中
      },
    ],
    // 我的订单列表
    myorderList: []
  }),
  // 相当于vue中的计算属性
  getters: {
    totalCount(state) {
      let res = 0
      state.cartList.forEach(item => {
        res += item.count
      })
      return res
    },
    totalPrice(state) {
      let res = 0
      state.cartList.forEach(item => {
        if (item.checked) {
          res += item.price * item.count
        }
      })
      // 保留2位小数
      return res.toFixed(2) * 100
    },
    orderList(state) {
      // 订单列表： 是购物车选中的商品组成的列表
      return state.cartList.filter(item => item.checked)
    },
    checkedAddress(state) {
      // 选中的地址
      return state.addressList.find(item => item.isChecked == true)
    }
  },
  actions: {
    // 将商品添加到购物车
    addItem(payload) {
      const index = this.cartList.findIndex(item => item.id == payload.id)
      if (index > -1) {
        // 说明此对象已在列表中(该商品已经在购物车中)
        this.cartList[index].count += 1
      } else {
        // 说明此对象不在列表中(该商品不在购物车中)
        this.cartList.push({
          ...payload,
          count: 1,  // 商品数量
          checked: false // 是否选中
        })
      }
    },
    deleteItem(id) {
      //  filter方法不改变原数组
      this.cartList = this.cartList.filter(item => item.id != id)
    },
    // 切换地址 -- 改变isChecked属性
    changeisChecked(id) {
      // 选中张三这一条，应该是给id为1的这条数据的isChecked属性赋值为true,其他的数据的isChecked都改为false
      // 选中李四这一条，应该是给id为2的这条数据的isChecked属性赋值为true,其他的数据的isChecked都改为false
      this.addressList.forEach(item => {
        item.isChecked = false
        if (item.id == id) {
          item.isChecked = true
        }
      })
    },
    // 将订单添加到订单列表
    addmyOrder(payload) {
      this.myorderList.push(payload)
    },
    //修改传入订单id的状态为2
    updateOrderStatus(id) {
      // 1代表：待支付   2代表：已支付
      this.myorderList.find(item => item.id == id).status = 2
    }
  },
  persist: true,
})
